# 练习 5：创建用户
# 需求
# 编写一个程序，实现创建用户的功能
# 提示用户输入 用户名  username = input("username: ").strip()
#   - 1. 空字符串不可用   2. 已存在的用户名不能使用(subprocess -> id)
# 随机生成 8位密码 (导入之前的模块文件 import randpass)
# 创建用户并设置密码  echo 8位密码 | passwd --stdin 用户名
# 将用户相关信息 写入指定文件
#   - info = "username: %s, passwd: %s" % (username, 8位密码)
#   fw = open(..., mode="a"): 文件追加写
import subprocess,randpass
def add_user(fname):
    # 1. 校验用户名可用不可用
    username = input("username: ").strip()
    res = subprocess.run("id %s &> /dev/null"%username,shell=True)
    if res.returncode == 0:
        print("%s: 已存在" % username)
        return None
    # 2. 创建用户以及为用户设置密码
    subprocess.run("useradd %s"%username, shell=True)
    passwd = randpass.randpasswd()
    subprocess.run(
        "echo %s | passwd --stdin %s" % (passwd, username),
        shell=True
    )
    # 3. 保存用户数据到指定文件(数据追加写, mode="a")
    info = "username: %s, password: %s\n" % (username, passwd)
    fw = open(fname, mode="a")
    fw.write(info)
    fw.close()
if __name__ == "__main__":
    add_user("/opt/user.txt")  # fname = "/opt/user.txt"
